package com.ymdx.action;

/**
 * Created by yangliwei on 2017/8/16.

 <action name="download" class="DownloadAction" method="download">
 <!-- 指定被下载资源的位置 -->
 <!-- <param name="inputPath">/Html/imgs/2.jpg</param> -->

 <!-- 配置结果类型为stream的结果 -->
 <result name="success" type="stream">
 <!-- 动态文件下载的，事先并不知道未来的文件类型，那么我们可以把它的值设置成为：application/octet- stream;charset=ISO8859-1 ，注意一定要加入charset，否则某些时候会导致下载的文件出错； -->
 <!-- contentType 指定下载文件的文件类型 ——application/octet-stream 表示无限制 -->
 <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
 <!-- inputName 流对象名 ——比如这里写inputStream，它就会自动去找Action中的getInputStream方法。  -->
 <param name="inputName">inputStream</param>
 <!-- contentDisposition 使用经过转码的文件名作为下载文件名 ——默认格式是attachment;filename="${fileName}"，将调用该Action中的getFileName方法。  -->
 <!-- attachment;filename="struts2.txt"，表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename="struts2.txt"，那么默认情况是代表inline，浏览器会尝试自动打开它，等价于这样的写法：inline; filename="struts2.txt" -->
 <!-- contentDisposition 使用经过转码的文件名作为下载文件名 ——默认格式是attachment;filename="${fileName}"，将调用该Action中的getFileName方法。  -->
 <param name="contentDisposition">attachment;filename="${fileName}"</param>
 <!-- 指定下载文件的缓冲大小 -->
 <param name="bufferSize">50000000</param>
 <param name="allowCaching">true</param>
 <param name="contentCharSet">UTF-8</param>
 </result>
 </action>


 *
 */
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import java.io.*;


public class DownLoadAction extends GenericActionSupport {
    private Long length;//定义文件大小变量
    private String contentType;//文件类型
    private String filename;//文件名

    @Action(value = "/download/sb2", results = {@Result(name = SUCCESS, type = STREAM, params = {
            "root", "responseTool",
            "includeProperties", "status,code,message,data\\.url"
    })})
    public String sb2() throws UnsupportedEncodingException{
        length = new File(ServletActionContext.getServletContext().getRealPath("/")+"\\upload\\图片.jpg").length();
        contentType="image/jpeg";
        filename = new String("图片.jpg".getBytes("UTF-8"),"ISO8859-1");
        return "success";
    }
    public InputStream getFileStream() throws FileNotFoundException{
        return new FileInputStream(new File(ServletActionContext.getServletContext().getRealPath("/")+"\\upload\\图片.jpg"));
    }
    public Long getLength() {
        return length;
    }

    public void setLength(Long length) {
        this.length = length;
    }

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }


}
